home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 001-025 / scopedisk1 / files / menu.c < prev    next >
C/C++ Source or Header  |  1995-03-18  |  2KB  |  106 lines

  1.  
  2. /*
  3.  *  MENU.C
  4.  *
  5.  *  (c)Copyright 1987 Matthew Dillon, All Rights Reserved.
  6.  *
  7.  */
  8.  
  9. #include "files.h"
  10.  
  11. #define NI  0        /*    means 'not initialized' */
  12.  
  13. static ITEXT IText[] = {
  14.     { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Save"        },
  15.     { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"SaveAs"      },
  16.     { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Load"        },
  17.     { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"LoadDefault" },
  18.     { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"Quit"        },
  19.     { 0, 1, JAM2, 0, 0, NULL, (ubyte *)"AddKillPat"  },
  20. };
  21.  
  22. static ITEM Item[] = {
  23.     { &Item[1], 0, NI, NI, NI, 0, 0, (APTR)&IText[0], NULL },
  24.     { &Item[2], 0, NI, NI, NI, 0, 0, (APTR)&IText[1], NULL },
  25.     { &Item[3], 0, NI, NI, NI, 0, 0, (APTR)&IText[2], NULL },
  26.     { &Item[4], 0, NI, NI, NI, 0, 0, (APTR)&IText[3], NULL },
  27.     { NULL    , 0, NI, NI, NI, 0, 0, (APTR)&IText[4], NULL },
  28.     { NULL    , 0, NI, NI, NI, 0, 0, (APTR)&IText[5], NULL },
  29. };
  30.  
  31. static MENU Menu[] = {
  32.     { &Menu[1], NI, 0, NI, NI, NI, "Project" , NI },
  33.     { NULL    , NI, 0, NI, NI, NI, "Control", NI  }
  34. };
  35.  
  36. addmenus()
  37. {
  38.     MENU *menu;
  39.     ITEM *item, *nit;
  40.     short left = 5;
  41.     short height;
  42.     short width;
  43.  
  44.     for (menu = Menu, item = Item; menu; menu = menu->NextMenu) {
  45.     height = 0;
  46.     width  = strlen(menu->MenuName);
  47.     menu->FirstItem = item;
  48.     for (item = menu->FirstItem; item; item = item->NextItem) {
  49.         if (width < strlen(((ITEXT *)item->ItemFill)->IText))
  50.         width = strlen(((ITEXT *)item->ItemFill)->IText);
  51.     }
  52.     width *= Win->RPort->TxWidth;
  53.     for (item = menu->FirstItem; item; nit = item, item = item->NextItem) {
  54.         item->Width   = width;
  55.         item->Height  = Win->RPort->TxHeight + 2;
  56.         item->TopEdge = height;
  57.         item->Flags  |= ITEMTEXT|ITEMENABLED|HIGHCOMP;
  58.         height += item->Height;
  59.     }
  60.     menu->LeftEdge = left;
  61.     menu->Width    = width;
  62.     menu->Height   = height;
  63.     menu->Flags    = MENUENABLED;
  64.     item = nit + 1;
  65.     left += width + 4;
  66.     }
  67.     SetMenuStrip(Win, Menu);
  68. }
  69.  
  70. remmenus()
  71. {
  72.     ClearMenuStrip(Win);
  73. }
  74.  
  75. getmenu(im)
  76. IMESS *im;
  77. {
  78.     register short mn = MENUNUM(im->Code);
  79.     register short in = ITEMNUM(im->Code);
  80.  
  81.     switch(mn) {
  82.     case 0:
  83.     switch(in) {
  84.     case 0:
  85.         return(MEN_SAVE);
  86.     case 1:
  87.         return(MEN_SAVEAS);
  88.     case 2:
  89.         return(MEN_LOAD);
  90.     case 3:
  91.         return(MEN_LOADEF);
  92.     case 4:
  93.         return(MEN_QUIT);
  94.     }
  95.     break;
  96.     case 1:
  97.     switch(in) {
  98.     case 0:
  99.         return(MEN_KILLPAT);
  100.     }
  101.     break;
  102.     }
  103.     return(0);
  104. }
  105.  
  106.